using System;
using MonoTouch.UIKit;
using System.Threading;
using Reply.Seat.LeadCollector.BL;
namespace Reply.Seat.LeadCollector.UI
{
	public class SharedCode
	{
		public delegate void OnUpdateBadgeEventHandler (object sender, EventArgs e);
		public static event OnUpdateBadgeEventHandler OnUpdateBadge;

		public static void UpdateBadge (object sender, EventArgs e)
		{
			OnUpdateBadge (sender, e);
		}

		public class NuovoViewController
		{
			public static bool DoReturn (UITextField tf)
			{
				tf.ResignFirstResponder ();
				return true;
			}


			public static void HandleSalvaBtnhandleTouchDown (UIViewController controller, UIView waitView, string nome, string cognome, string numeroTelefono, string email)
			{
				
				#if !DEBUG
				if (string.IsNullOrWhiteSpace (this.nomeTxt.Text) || string.IsNullOrWhiteSpace (this.cognomeTxt.Text) || string.IsNullOrWhiteSpace (this.numeroTelefonoTxt.Text) || string.IsNullOrWhiteSpace (this.emailTxt.Text)) {
					new UIAlertView ("Campi obbligatori", "Popolare tutti i campi prima di salvare", null, null, "Ok").Show ();
					return;
				}
				#endif
				using (WaitAnimation wa = new WaitAnimation (waitView)) {
					///Aggiorna la UI mettendo in attesa
					wa.StartWait ();
					///Aggiorna la UI ripristinando le funzionalità
					
					//new UIAlertView ("Avviso", "Il lead è stato creato", null, null, "Ok").Show ();
					new Thread (() =>
					{
						SharedObjects.LeadNonSincronizzati.Add (new Lead { Nome = nome, Cognome = cognome, NumeroTelefono = numeroTelefono, IndirizzoEmail = email });
						controller.BeginInvokeOnMainThread (() =>
						{
							Thread.Sleep (1000);
							wa.EndWait ();
							UpdateBadge (controller, null);
						});
					}).Start ();
				}
			}
		}
		
		public class MainWindow
		{
			public static void HandleSincronizzaBtnClicked (UIViewController controller, UITableViewController nonSincronizzatiTableViewController)
		{
			using (WaitAnimation wa = new WaitAnimation (null)) {
				///Aggiorna la UI mettendo in attesa
				wa.StartWait ();
				new Thread (() =>
				{
					foreach (var lead in SharedObjects.LeadNonSincronizzati.ToArray ()) {
						if (SharedObjects.Logic.TrySyncronizeLead (lead)) {
							SharedObjects.LeadNonSincronizzati.Remove (lead);
							SharedObjects.LeadSincronizzati.Add (lead);
							controller.BeginInvokeOnMainThread (() =>
							{
								nonSincronizzatiTableViewController.TableView.ReloadData ();
								UpdateBadge(controller,null);
							});
						}
					}
					controller.BeginInvokeOnMainThread (() => { wa.EndWait (); });
				}).Start ();
			}
		}
			
		}
	}
}

